package Divers;

import general.Fichiers;

import java.awt.List;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;

import utilitaire.UtilitaireFichier;

public class RechercherMotCle {
	/**
	 * @param args
	 */	
	private static final String dossierAParcourir = "C:\\dev\\psa\\workspace_default\\cvnWeb\\JavaSource\\";
	
	private static final String cheminFichierSortie = "C:\\Documents and Settings\\DACO\\Bureau\\";
	private static final String nomFichierSortie = "lignesMotsCle.txt";
	private static final String nomFichierSortie2 = "session.propertiesBrute";
	
	private static final String listeMotsCle= "getFromSession;putInSession";
	
	public static String resultatFichiers;
	public static String resultatFichiers2;
	public static String messageErreur;
	
	public static void main(String[] args) {
		System.out.println("Debut de programme");
		resultatFichiers = "";
		resultatFichiers2 = "";
		try {
			File source = new File(dossierAParcourir);
			analyseDossier(source);
			Fichiers fichier = new Fichiers(cheminFichierSortie +nomFichierSortie);
			Fichiers fichier2 = new Fichiers(cheminFichierSortie +nomFichierSortie2);
			fichier.ecrirerFichier(resultatFichiers);
			fichier2.ecrirerFichier(resultatFichiers2);
		} catch (Exception e) {
			System.out.println("ERREUR : " + e.getMessage() +", "+e.toString());
		}
		System.out.println("Fin de programme");
		
	}	

	public static boolean analyseDossier(File path) throws Exception { 
		try {
		    if( path.exists() ) { 
	            File[] files = path.listFiles(); 
	            for(int i=0; i<files.length; i++) { 
	                    if(files[i].isDirectory()) { 
	                            analyseDossier(files[i]); 
	                    } 
	                    else { 
	                    	String extension  = UtilitaireFichier.rechercherExtension(files[i].getPath());
	                    	if(extension.equals("java")) {
	                    		String[] resultatFichier = analyseFichier(files[i]);
	                    		resultatFichiers += resultatFichier[0];
	                    		if(resultatFichier[0] != "") { 
	                    			String nomPackage = files[i].getPath().substring(dossierAParcourir.length(), files[i].getPath().length());
	                    			nomPackage = nomPackage.replace(".java", "");
	                    			resultatFichiers2 += nomPackage+"="+resultatFichier[1] + "\n";
	                    		}
	                    	}
	                    } 
	            } 
	    } 
		} catch (Exception e) {
			System.out.println(messageErreur);
			throw e;
		}
	    return true; 
	}
	
	static public String[] analyseFichier(File path) throws Exception { 
		int i=0;
		int y=0;
		ArrayList<String> ListeVariblesDufichier = new ArrayList<String>();
		String txtSortie[] = new String[2]; txtSortie[0] = txtSortie[1] = "";
		System.out.println("Analyse du Fichier : "+ path.getPath());
		try {
			Fichiers fichier = new Fichiers(path.getPath());
			String[] txt = fichier.lireFichier();
					
			//pour chaque ligne du fichier regarder si il ni a pas 
			// un mot cle
			for (i = 0 ; i < txt.length ; i++) {
				if(txt[i] != null) {
					int nbrdeMotsDansString = stringFaitPartiDeLaListe(txt[i],listeMotsCle);
					if( nbrdeMotsDansString == 1) {
						String nomVariable = identifieVariablesDansString(txt[i].trim());
						if(!ListeVariblesDufichier.contains(nomVariable)) {
							ListeVariblesDufichier.add(nomVariable);
							txtSortie[0] +=path.getName()+" L"+ i+" "+nomVariable+"\t\t\t\t"+txt[i].trim()+"\n";
							if(!nomVariable.contains("ERREUR") ) {
								if(nomVariable.contains("\"")) {
									txtSortie[1] +=nomVariable.replace("\"", "")+";";
								}
								else {
									txtSortie[1] +="\""+nomVariable+"\";";
								}
							}
							else {
								txtSortie[1] +="var"+y+";";	y++;
							}
						}
					}
					else if ( nbrdeMotsDansString > 1 ) {
						txtSortie[0] +=path.getName()+" L"+ i+"Multiple mots cle\t\t\t\t"+txt[i].trim()+"\n"; 
						txtSortie[1] +="var"+y+";";	y++;
						txtSortie[1] +="var"+y+";";	y++;
					}
						
				}
			}
			if( !txtSortie[0].equals("")) {
				txtSortie[0]+="\n";
			}
		} catch (Exception e) {
			messageErreur = "ERREUR : L "+i+" fichier : "+path.getName() ;
			throw e;
		}
	    return txtSortie; 
	}
	
	/**
	 *  regarde si la variable est deja presente dans la liste
	 * @param Variable
	 * @param listeVariables
	 * @return
	 * @throws Exception
	 */
	private static int stringFaitPartiDeLaListe(String  Variable, String listeVariables) throws Exception{
		// retourne le nombre de fois qu'un mot cle a ete trouvee
		int resultat = 0;
		try {
			String[] tabListeVariables = listeVariables.split(";");
			for (int i = 0 ; i < tabListeVariables.length ; i++) {
				if( Variable.contains(tabListeVariables[i]) ) {
					resultat++;
				}
			}
		} catch (Exception e) {
			throw e;
		}
		return resultat;
	}
	
	/**
	 *  regarde si la variable est deja presente dans la liste
	 * @param Variable
	 * @param listeVariables
	 * @return
	 * @throws Exception
	 */
	private static String identifieVariablesDansString(String  ligne) throws Exception{
		//} else if (getFromSession(request, CURRENT_PAGE_NUMBER_SESSION) == null) {
		String nomVariable = "";
		try {
			String finLigne = ligne.substring(ligne.indexOf(",")+1,ligne.length() );
			finLigne = finLigne.replace(",", ")");
			finLigne = finLigne.substring(0, finLigne.indexOf(")") );
			nomVariable = finLigne.trim();
		} catch (Exception e) {
			nomVariable = "ERREUR : Variable non trouvee ";
		}
		if(nomVariable.contains("(") || nomVariable.contains(")") || nomVariable.contains(";")) {
			nomVariable = "ERREUR : Variable non trouvee ";
		}
		return nomVariable;
	}
	

	
	
}




